package com.example.demo.thread.atomic;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * AtomicInteger：原子更新整型
 *
 * @author luowj12
 * @since 2021/4/22 18:05
 */
public class AtomicIntegerTest {

    public static void main(String[] args) {
        AtomicInteger t =new AtomicInteger(0);
        //获取当前最新值，
        t.get();
        //设置当前值，具备volatile效果，方法用final修饰是为了更进一步的保证线程安全。
        t.set(2);
        //最终会设置成newValue，使用该方法后可能导致其他线程在之后的一小段时间内可以获取到旧值，有点类似于延迟加载
        t.lazySet(3);
        //设置新值并获取旧值，底层调用的是CAS操作即unsafe.compareAndSwapInt()方法
        t.getAndSet(4);
        //如果当前值为expect，则设置为update(当前值指的是value变量)
        t.compareAndSet(5,6);
        //当前值加1返回旧值，底层CAS操作
        t.getAndIncrement();
        //当前值减1，返回旧值，底层CAS操作
        t.getAndDecrement();
        //当前值增加delta，返回旧值，底层CAS操作
        t.getAndAdd(7);
        //当前值加1，返回新值，底层CAS操作
        t.incrementAndGet();
        //当前值减1，返回新值，底层CAS操作
        t.decrementAndGet();
        //当前值增加delta，返回新值，底层CAS操作
        t.addAndGet(8);
    }

}
